package algorithm.arrayAlgorithm;

import java.util.Arrays;

/**
 * @ClassName: MaxRotateFunction
 * @Description 396. 旋转函数
 *
 * 给定一个长度为 n 的整数数组 nums 。
 *
 * 假设 arrk 是数组 nums 顺时针旋转 k 个位置后的数组，我们定义 nums 的 旋转函数  F 为：
 *
 * F(k) = 0 * arrk[0] + 1 * arrk[1] + ... + (n - 1) * arrk[n - 1]
 * 返回 F(0), F(1), ..., F(n-1)中的最大值 。
 *
 * 生成的测试用例让答案符合 32 位 整数。
 *
 * @Author skywingking
 * @Date 2022/4/22 21:50
 **/
public class MaxRotateFunction {
    public int maxRotateFunction(int[] nums) {
        int f = 0, n = nums.length, numSum = Arrays.stream(nums).sum();
        for(int i = 0; i < n; i++){
            f += i * nums[i];
        }
        int res = f;
        for(int i = n - 1; i > 0; i--){
            f += numSum - n * nums[i];
            res = Math.max(res,f);
        }
        return res;
    }
}